﻿// 
// TypeScriptTask.cs
// 
// Author:
//   Matt Ward <ward.matt@gmail.com>
// 
// Copyright (C) 2014 Matthew Ward
// 
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to
// permit persons to whom the Software is furnished to do so, subject to
// the following conditions:
// 
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
// 
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//

using System;
using ICSharpCode.Core;
using ICSharpCode.NRefactory;
using ICSharpCode.NRefactory.Editor;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Editor;
using ICSharpCode.TypeScriptBinding.Hosting;

namespace ICSharpCode.TypeScriptBinding
{
	public class TypeScriptTask : SDTask
	{
		public TypeScriptTask(
			FileName fileName,
			Diagnostic diagnostic,
			int column,
			int line)
			: base(
				fileName,
				diagnostic.ToString(),
				column,
				line,
				GetTaskType(diagnostic.category))
		{
		}
		
		static TaskType GetTaskType(DiagnosticCategory category)
		{
			switch (category) {
				case DiagnosticCategory.Warning:
					return TaskType.Warning;
				case DiagnosticCategory.Error:
					return TaskType.Error;
				case DiagnosticCategory.Message:
					return TaskType.Message;
				default:
					return TaskType.Error;
			}
		}
		
		public static TypeScriptTask Create(FileName fileName, Diagnostic diagnostic, IDocument document)
		{
			TextLocation location = document.GetLocation(diagnostic.start);
			return new TypeScriptTask(fileName, diagnostic, location.Column, location.Line);
		}
	}
}
